package com.common.platform.base.config.database;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;

import java.util.Date;

public class AutoFullHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        if (metaObject.hasGetter(getCreateTimeFiledName())) {
            Object createTime = getFieldValByName(getCreateTimeFiledName(), metaObject);
            if (createTime == null) {
                setFieldValByName(getCreateTimeFiledName(), new Date(), metaObject);
            }
        }
        if (metaObject.hasGetter(getCreateUserFiledName())) {
            Object createUser = getFieldValByName(getCreateUserFiledName(), metaObject);
            if (createUser == null) {
                setFieldValByName(getCreateUserFiledName(), getUserUniqueId(), metaObject);
            }
        }

    }

    @Override
    public void updateFill(MetaObject metaObject) {
        if (metaObject.hasGetter(getUpdateTimeFiledName())) {
            setFieldValByName(getUpdateTimeFiledName(), new Date(), metaObject);
        }
        if (metaObject.hasGetter(getUpdateTimeFiledName())) {
            setFieldValByName(getUpdateTimeFiledName(), getUserUniqueId(), metaObject);
        }
    }

    /**
     * 获取更新时间字段
     */
    protected String getUpdateTimeFiledName() {
        return "updateTime";
    }

    /**
     * 获取更新人员字段的名称 非数据库中的字段名
     */
    protected String getUpdateUserFiledName() {
        return "updateUser";
    }

    /**
     * 获取创建时间字段的名称 非数据库中的字段名
     */
    protected String getCreateTimeFiledName() {
        return "createTime";
    }

    /**
     * 获取创建人员字段的名称 非数据库中的字段名
     */
    protected String getCreateUserFiledName() {
        return "createUser";
    }

    /**
     * 获取用户唯一的Id
     */
    protected Object getUserUniqueId() {
        return "";
    }
}
